#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>
#include <set>
#include <vector>
#include <stack>
using namespace std;

vector<int> intersection(vector<int>& nums1, vector<int>& nums2)
{
	set<int> s1(nums1.begin(), nums1.end());
	set<int> s2(nums2.begin(), nums2.end());

	auto i2 = s2.begin();
	auto i1 = s1.begin();
	vector<int> ret;
	while (i1 != s1.end() && i2 != s2.end())
	{
		if (*i1 < *i2)
		{
			i1++;
		}
		else if (*i1 > *i2)
		{
			i2++;
		}
		else
		{
			ret.push_back(*i1);
			i1++;
			i2++;
		}
	}
	return ret;
}

string del(string& s)
{
	string ret = "";
	int cur = 0, des = 1;
	while (des < s.size())
	{
		if (s[cur] != s[des])
		{
			ret += tolower(s[cur]);
		}
		else
		{
			des++;
			cur++;
		}
		des++;
		cur++;
	}
	if (ret.size()==0 && cur >= s.size())
		return "";
	else
		ret += tolower(s[cur]);

	
	return ret;
}

bool empty(string& s)
{
	if (s.size() == 0 || s.size() == 1)
		return true;
	for (int i = 0; i < s.size() - 1; i++)
	{
		if (s[i] == s[i + 1])
		{
			return false;
		}
	}
	return true;
}
//int main()
//{
//	string s;
//	cin >> s;
//	do
//	{
//		s = del(s);
//
//	} while (!empty(s));
//
//	if (s != "")
//		cout << s << endl;
//	else
//		cout << 0 << endl;
//	return 0;
//}

//int have_two(int n)
//{
//	int sum = 0;
//	while (n)
//	{
//		if (n % 10 == 2)
//			sum++;
//		n /= 10;
//	}
//	return sum;
//}
//int main()
//{
//	int left, right,ct=0;
//	cin >> left >> right;
//	for (int i = left; i <= right; i++)
//	{
//		ct += have_two(i);
//	}
//	cout << ct;
//	return 0;
//}

int main()
{
	stack<char> st;
	string s;
	cin >> s;
	for (auto e : s)
	{
		if (st.size() == 0)
		{
			st.push(e);
		}
		else
		{
			if (st.top() != e)
			{
				st.push(e);
			}
			else
			{
				st.pop();
			}
		}
	}
	if (st.size() == 0)
		cout << 0;
	else
	{
		string ret;
		while (st.size() != 0)
		{
			ret += st.top();
			st.pop();
		}
		reverse(ret.begin(), ret.end());
		cout << ret << endl;
	}
	
	return 0;
}